/**
 * 系统功能列表
 * @author lms 2022.08.02
 */
package ms.core.gateway.utils;

import java.util.ArrayList;
import java.util.List;

import ms.core.gateway.bean.SysFuncBean.Item;
import ms.core.gateway.dao.SysFuncDao;
import ms.core.gateway.dto.SysFuncDTO;
import ms.core.gateway.response.SysFuncVO;
import ms.core.tool.JsonTool;
import ms.core.tool.TreeTool;
import ms.core.tool.TreeTool.TreeNode;

public class SysFuncUtils {
	
	private static List<Item> filterUtypeFuncs(int ctype, List<Item> list){
		if (list==null || list.size()==0) 
			return null;
		
		List<Item> rets = new ArrayList<>();

		for(int i=0; i<list.size(); i++) {
			if (list.get(i).getTag()==0) {
				rets.add(list.get(i));
				continue;
			}
			
			//判断某功能点是否属于某类用户
			if ( (list.get(i).getTag() & ctype) > 0) {
				rets.add(list.get(i));
			}
		}
		
		return rets;		
	}

	/**
	 * 加载系统模块功能列表
	 * 
	 * @param ctype
	 * @return
	 */
	public static synchronized List<SysFuncDTO> loadModules(int ctype) {
		SysFuncDao dao = new SysFuncDao();
		List<SysFuncDTO> rets = new ArrayList<>();
		List<SysFuncVO> list = dao.loadSysFunc();
		if (list!=null) {
			for(int i=0; i<list.size(); i++) {
				List<Item> funcs = filterUtypeFuncs(ctype, list.get(i).getFuncList());
				if (funcs!=null && funcs.size()==0) continue;

				SysFuncDTO e = new SysFuncDTO(list.get(i).getId(), list.get(i).getPId(), list.get(i).getModule(), list.get(i).getTitle(), funcs);
				rets.add(e);
			}
		}
		
		return rets;
	}

	/**
	 * 加载系统功能列表
	 * 
	 * @param ctype 企业类型
	 * @return
	 */
	public static synchronized List<String> loadFuncs(int ctype) {
		List<String> rets = new ArrayList<>();
		List<SysFuncDTO> list = loadModules(ctype);
		if (list==null || list.size()==0) return rets;
		
		for(int i=0; i<list.size(); i++) {
			List<Item> funcs = list.get(i).getFuncs();
			if (funcs==null || funcs.size()==0) continue;
			
			for(int j=0; j<funcs.size(); j++) {
				rets.add(funcs.get(j).getId());
			}
		}

		return rets;
	}

	public static void main(String[] args) {
		List<SysFuncDTO> list = SysFuncUtils.loadModules(1);
		List<TreeNode> nodes = new ArrayList<>();

		for(SysFuncDTO func: list) {
			TreeNode node = new TreeNode(String.valueOf(func.getId()), String.valueOf(func.getPId()), func, null);
			nodes.add(node);
		}
		List<TreeNode> tv = TreeTool.buildTree(nodes, "0");

		System.out.println(JsonTool.listBeanToJson(tv));
	}
}
